package com.canyou.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.canyou.system.entity.dept.DeptListVO;
import com.canyou.system.entity.dept.DeptVO;
import com.canyou.system.model.Dept;

import java.util.List;

/**
 * 部门服务类
 *
 * @author canyou
 * @since 2019-05-14
 */
public interface DeptService extends IService<Dept> {

    /**
     * 获取树形部门
     *
     * @param deptName 部门名称
     * @param orgName  机构名称
     * @return
     */
    List<DeptVO> getDeptTree(String deptName, String orgName);

    /**
     * 获取部门详情信息
     *
     * @param id 部门id
     * @return
     */
    DeptVO getDeptDetailById(Long id);

    /**
     * 判断该机构下部门是否存在
     *
     * @param orgId    所属机构id
     * @param deptName 部门名称
     * @param deptId   部门id
     * @return
     */
    boolean existDept(Long orgId, String deptName, Long deptId);

    /**
     * 获取部门子部门数
     *
     * @param deptId
     * @return
     */
    int getDeptChildCount(Long deptId);

    /**
     * 获取部门拥有的用户数量
     *
     * @param deptId 部门id
     * @return
     */
    long getDeptUserCount(Long deptId);

    /**
     * 根据部门id删除部门, 物理删除
     *
     * @param deptId 部门id
     * @return
     */
    boolean removeById(Long deptId);

    /**
     * 递归构建 节点parentId为rootId的列表, 非树形结构
     *
     * @param rootId 根节点id
     * @return
     */
    List<DeptListVO> getDeptAndChildList(Long rootId);

    /**
     * 递归构建 节点parentId为rootId的id列表, 非树形结构
     *
     * @param rootId 根节点id
     * @return
     */
    List<Long> getDeptAndChildIdList(Long rootId);

}
